import axios from 'axios'

// 创建axios实例
const api = axios.create({
  baseURL: 'http://localhost:2025',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 根据请求路径选择正确的token
    let token = null
    
    // 如果是管理员API，使用管理员token
    if (config.url && config.url.startsWith('/api/admin')) {
      token = localStorage.getItem('adminToken')
    } else {
      // 否则使用普通用户token
      token = localStorage.getItem('userToken')
    }
    
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
api.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    // 只在非常规情况下打印详细错误
    if (error.response?.status >= 500) {
      console.error('服务器错误:', error)
      console.error('错误状态码:', error.response.status)
      console.error('错误数据:', error.response.data)
    }
    
    // 处理不同的错误状态码
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 未授权，根据请求类型清除对应的token
          if (error.config?.url && error.config.url.startsWith('/api/admin')) {
            localStorage.removeItem('adminToken')
            localStorage.removeItem('adminInfo')
            localStorage.removeItem('adminTokenExpiry')
          } else {
            localStorage.removeItem('userToken')
            localStorage.removeItem('userInfo')
            localStorage.removeItem('userTokenExpiry')
          }
          break
        case 403:
          console.error('权限不足')
          break
        case 404:
          // 404是常见错误，不需要详细日志
          break
        case 500:
          console.error('服务器内部错误')
          break
        default:
          // 其他4xx错误，简化日志
          if (error.response.status >= 400 && error.response.status < 500) {
            console.warn(`请求错误 ${error.response.status}:`, error.response.data?.message || '未知错误')
          }
      }
    } else if (error.request) {
      console.error('网络错误')
    } else {
      console.error('请求配置错误')
    }
    
    return Promise.reject(error)
  }
)

// 用户相关API
export const userAPI = {
  // 用户注册
  register: (data) => api.post('/api/users/register', data),
  
  // 用户登录
  login: (data) => api.post('/api/users/login', data),
  
  // 手机号登录
  loginWithPhone: (data) => api.post('/api/users/login/phone', data),
  
  // 发送验证码
  sendCode: (phone) => api.post('/api/users/send-code', null, { params: { phone } }),
  
  // 获取用户资料
  getProfile: () => api.get('/api/users/profile')
}

// 管理员相关API
export const adminAPI = {
  // 管理员登录
  login: (data) => api.post('/api/admin/login', data),
  
  // 获取管理员资料
  getProfile: () => api.get('/api/admin/profile'),
  
  // 获取所有用户
  getAllUsers: () => api.get('/api/admin/users'),
  
  // 删除用户
  deleteUser: (userId) => api.delete(`/api/admin/users/${userId}`)
}

// 音乐相关API
export const musicAPI = {
  // 获取所有音乐
  getAllMusic: (page = 0, size = 20) => api.get(`/api/music?page=${page}&size=${size}`),
  
  // 根据分类获取音乐
  getMusicByCategory: (categoryId, page = 0, size = 20) => api.get(`/api/music/category/${categoryId}?page=${page}&size=${size}`),
  
  // 搜索音乐
  searchMusic: (query, page = 0, size = 20) => api.get(`/api/music/search?query=${query}&page=${page}&size=${size}`),
  
  // 获取音乐详情
  getMusicDetails: (musicId) => api.get(`/api/music/${musicId}`),
  
  // 上传音乐
  uploadMusic: (formData) => api.post('/api/music/upload', formData, {
    headers: { 'Content-Type': 'multipart/form-data' }
  }),
  
  // 获取热门音乐 - 使用公开API
  getPopularMusic: (limit = 20) => api.get(`/api/music/popular?limit=${limit}`),
  
  // 获取推荐音乐 - 使用公开API
  getRecommendedMusic: (limit = 20) => api.get(`/api/music/recommended?limit=${limit}`),
  
  // 获取最新音乐（暂时使用热门音乐）
  getLatestMusic: (limit = 20) => api.get(`/api/music/popular?limit=${limit}`)
}

// 分类相关API
export const categoryAPI = {
  // 获取所有分类（公开接口）
  getAllCategories: () => api.get('/api/categories/all'),
  
  // 获取分类详情
  getCategoryDetails: (categoryId) => api.get(`/api/categories/${categoryId}`)
}

// 播放历史和收藏相关API
export const playlistAPI = {
  // 添加播放历史
  addPlayHistory: (musicId) => api.post('/api/users/play-history', { musicId }),
  
  // 获取播放历史
  getPlayHistory: (page = 0, size = 20) => api.get(`/api/users/play-history?page=${page}&size=${size}`),
  
  // 添加收藏
  addFavorite: (musicId) => api.post('/api/users/favorites', { musicId }),
  
  // 取消收藏
  removeFavorite: (musicId) => api.delete(`/api/users/favorites/${musicId}`),
  
  // 获取收藏列表
  getFavorites: (page = 0, size = 20) => api.get(`/api/users/favorites?page=${page}&size=${size}`),
  
  // 检查收藏状态
  checkFavorite: (musicId) => api.get(`/api/users/favorites/check/${musicId}`)
}

// 通用认证API
export const authAPI = {
  // 验证token
  verifyToken: (token) => api.post('/api/auth/verify-token', null, { params: { token } }),
  
  // 刷新token
  refreshToken: (token) => api.post('/api/auth/refresh-token', null, { params: { token } }),
  
  // 退出登录
  logout: (token) => api.post('/api/auth/logout', null, { params: { token } })
}

export default api 